home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- . /usr/share/os-prober/common.sh
-
- set -e
-
- newns "$@"
- require_tmpdir
-
- grep "^/dev/" /proc/mounts | parse_proc_mounts >"$OS_PROBER_TMP/mounted-map" || true
-
- partition="$1"
- if ! mapped="$(mapdevfs "$partition")"; then
- log "Device '$partition' does not exist; skipping"
- continue
- fi
-
- if ! grep -q "^$mapped " "$OS_PROBER_TMP/mounted-map"; then
- for test in /usr/lib/linux-boot-probes/*; do
- debug "running $test"
- if [ -x $test ] && [ -f $test ]; then
- if $test "$partition"; then
- debug "linux detected by $test"
- break
- fi
- fi
- done
- else
- mpoint=$(grep "^$mapped " "$OS_PROBER_TMP/mounted-map" | head -n1 | cut -d " " -f 2)
- mpoint="$(unescape_mount "$mpoint")"
- if [ "$mpoint" != "/target/boot" ] && [ "$mpoint" != "/target" ] && [ "$mpoint" != "/" ]; then
- type=$(grep "^$mapped " "$OS_PROBER_TMP/mounted-map" | head -n1 | cut -d " " -f 3)
- if ! grep -q " $mpoint/boot " "$OS_PROBER_TMP/mounted-map"; then
- mountboot="$(linux_mount_boot "$partition" "$mpoint")"
- bootpart="${mountboot%% *}"
- bootmounted="${mountboot#* }"
- else
- bootpart="$partition"
- bootmounted=0
- fi
- for test in /usr/lib/linux-boot-probes/mounted/*; do
- if [ -f $test ] && [ -x $test ]; then
- debug "running $test on mounted $partition"
- if $test "$partition" "$bootpart" "$mpoint" "$type"; then
- debug "$test succeeded"
- break
- fi
- fi
- done
- if [ "$bootmounted" = 1 ]; then
- if ! umount "$mpoint/boot"; then
- warn "failed to umount $mpoint/boot"
- fi
- fi
- fi
- fi
-